package cn.j229.bug.zhongxuan.controller;

import cn.j229.bug.zhongxuan.BusinessException;
import cn.j229.bug.zhongxuan.util.JsonResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

import java.util.Map;

@ControllerAdvice   // 将当前类作为全局异常的总处理入口（类）
public class ExceptionController {
    @ExceptionHandler({Exception.class})
    public void handleException(Exception e){
        // 系统异常：记录日志
        System.out.println("---------------------------------------------");
        System.out.println("异常发生的原因：" + e.getMessage());
        System.out.println("异常的类型：" + e.toString());
        e.printStackTrace();   // 打印到控制台

        // 如果要把异常在栈中的错误信息获取并输出到文件
        StackTraceElement[] stackTrace = e.getStackTrace();
        for (StackTraceElement stackTraceElement : stackTrace) {
            System.out.println(stackTraceElement.toString());
        }
        System.out.println("---------------------------------------------");
    }

    @ExceptionHandler(BusinessException.class)
    public Map handleBusinessException(BusinessException e){
        // 如果是业务异常，则应该给前端反馈
        JsonResult jsonResult = new JsonResult();
        jsonResult.setCode("500");
        jsonResult.setMsg(e.getMessage());
        return jsonResult.getValues();
    }
}
